home *** CD-ROM | disk | FTP | other *** search
/ Reverse Code Engineering RCE CD +sandman 2000 / ReverseCodeEngineeringRceCdsandman2000.iso / RCE / Tools / Turbo Pascal V7 / BREAKOUT.ZIP / COUNT.PAS < prev    next >
Pascal/Delphi Source File  |  1992-11-03  |  5KB  |  244 lines

  1. {************************************************}
  2. {                                                }
  3. {   Breakout Demo Program                        }
  4. {   Copyright (c) 1992 by Borland International  }
  5. {                                                }
  6. {************************************************}
  7.  
  8. unit Count;
  9.  
  10. {
  11.   See BREAKOUT.PAS.
  12.   This unit provides several text display object types, most of
  13.   which are coupled with various types of counters.
  14. }
  15.  
  16. interface
  17.  
  18. uses Screen;
  19.  
  20. const
  21.   StrSize = 40;
  22.  
  23. type
  24.   TextStr = String[StrSize];
  25.   TextPtr = ^TextStr;
  26.  
  27.   TextString = object(Location)
  28.     Text : TextPtr;
  29.     Attr : Byte;
  30.     constructor Init(InitX, InitY : Integer;
  31.                      InitText : TextStr;
  32.                      InitAttr : Byte);
  33.     procedure Show; virtual;
  34.     procedure Hide; virtual;
  35.   end;
  36.  
  37.   Counter = object(TextString)
  38.     Value : Integer;
  39.     BaseValue : Integer;
  40.     constructor Init(InitValue, InitX, InitY : Integer;
  41.                      InitName : TextStr;
  42.                      InitAttr : Byte);
  43.     procedure Show; virtual;
  44.     procedure Hide; virtual;
  45.     procedure ShowVal; virtual;
  46.     procedure HideVal; virtual;
  47.     procedure SetValue(NewValue : Integer);
  48.     procedure Reset;
  49.     procedure Increment;
  50.     procedure Decrement;
  51.     procedure Add(Incr : Integer);
  52.     function Equal(TestValue : Integer) : Boolean;
  53.     function GetValue : Integer;
  54.   end;
  55.  
  56.   DownCounter = object(Counter)
  57.     Minimum : Integer;
  58.     constructor Init(InitValue, InitX, InitY, InitMin : Integer;
  59.                      InitName : TextStr;
  60.                      InitAttr : Byte);
  61.     procedure Decrement;
  62.     procedure Add(Incr : Integer);
  63.     function Last : Boolean;
  64.   end;
  65.  
  66.   LimitCounter = object(DownCounter)
  67.     Maximum : Integer;
  68.     constructor Init(InitValue, InitX, InitY, InitMin, InitMax : Integer;
  69.                      InitName : TextStr;
  70.                      InitAttr : Byte);
  71.     procedure Increment;
  72.     procedure Add(Incr : Integer);
  73.   end;
  74.  
  75. implementation
  76.  
  77. uses Crt;
  78.  
  79. constructor TextString.Init(InitX, InitY : Integer;
  80.                             InitText : TextStr;
  81.                             InitAttr : Byte);
  82. begin
  83.   Location.Init(InitX, InitY);
  84.   Attr := InitAttr;
  85.   GetMem(Text, Length(InitText) + 1);
  86.   Move(InitText, Text^, Length(InitText) + 1);
  87. end;
  88.  
  89. procedure TextString.Show;
  90. begin
  91.   Visible := True;
  92.   GoToXY(X, Y);
  93.   TextColor(Attr);
  94.   Write(Text^);
  95. end;
  96.  
  97. procedure TextString.Hide;
  98. begin
  99.   Visible := False;
  100.   GoToXY(X, Y);
  101.   TextAttr := Attr;
  102.   Write('' : Length(Text^));
  103. end;
  104.  
  105. constructor Counter.Init(InitValue, InitX, InitY : Integer;
  106.                          InitName : TextStr;
  107.                          InitAttr : Byte);
  108. begin
  109.   TextString.Init(InitX, InitY, InitName, InitAttr);
  110.   BaseValue := InitValue;
  111.   Value := InitValue;
  112. end;
  113.  
  114. procedure Counter.Show;
  115. begin
  116.   Visible := True;
  117.   GoToXY(X, Y);
  118.   TextColor(Attr);
  119.   Write(Text^, ': ', Value);
  120. end;
  121.  
  122. procedure Counter.Hide;
  123. begin
  124.   Visible := False;
  125.   GoToXY(X, Y);
  126.   TextAttr := Attr;
  127.   Write('' : Length(Text^) + 7);
  128. end;
  129.  
  130. procedure Counter.ShowVal;
  131. begin
  132.   Visible := True;
  133.   GoToXY(X + Length(Text^) + 2, Y);
  134.   TextColor(Attr);
  135.   Write(Value);
  136. end;
  137.  
  138. procedure Counter.HideVal;
  139. begin
  140.   Visible := False;
  141.   GoToXY(X + Length(Text^) + 2, Y);
  142.   TextAttr := Attr;
  143.   Write('' : 5);
  144. end;
  145.  
  146. procedure Counter.SetValue(NewValue : Integer);
  147. var
  148.   Vis : Boolean;
  149. begin
  150.   Vis := Visible;
  151.   if Vis then
  152.     HideVal;
  153.   Value := NewValue;
  154.   if Vis then
  155.     ShowVal;
  156. end;
  157.  
  158. procedure Counter.Increment;
  159. begin
  160.   SetValue(Value + 1);
  161. end;
  162.  
  163. procedure Counter.Decrement;
  164. begin
  165.   SetValue(Value - 1);
  166. end;
  167.  
  168. procedure Counter.Add(Incr : Integer);
  169. begin
  170.   SetValue(Value + Incr);
  171. end;
  172.  
  173. procedure Counter.Reset;
  174. begin
  175.   SetValue(BaseValue);
  176. end;
  177.  
  178. function Counter.Equal(TestValue : Integer) : Boolean;
  179. begin
  180.   Equal := (Value = TestValue);
  181. end;
  182.  
  183. function Counter.GetValue : Integer;
  184. begin
  185.   GetValue := Value;
  186. end;
  187.  
  188. constructor DownCounter.Init(InitValue, InitX, InitY, InitMin : Integer;
  189.                              InitName : TextStr;
  190.                              InitAttr : Byte);
  191. begin
  192.   Counter.Init(InitValue, InitX, InitY, InitName, InitAttr);
  193.   Minimum := InitMin;
  194. end;
  195.  
  196. procedure DownCounter.Decrement;
  197. begin
  198.   if Value > Minimum then
  199.     Counter.Decrement;
  200. end;
  201.  
  202. procedure DownCounter.Add(Incr : Integer);
  203. var
  204.   Temp : Integer;
  205. begin
  206.   Temp := GetValue + Incr;
  207.   if Temp >= Minimum then
  208.     SetValue(Temp);
  209. end;
  210.  
  211. function DownCounter.Last : Boolean;
  212. begin
  213.   Last := (Value = Minimum);
  214. end;
  215.  
  216. constructor LimitCounter.Init(InitValue,
  217.                               InitX,
  218.                               InitY,
  219.                               InitMin,
  220.                               InitMax : Integer;
  221.                               InitName : TextStr;
  222.                               InitAttr : Byte);
  223. begin
  224.   DownCounter.Init(InitValue, InitX, InitY, InitMin, InitName, InitAttr);
  225.   Maximum := InitMax;
  226. end;
  227.  
  228. procedure LimitCounter.Increment;
  229. begin
  230.   if Value < Maximum then
  231.     Counter.Increment;
  232. end;
  233.  
  234. procedure LimitCounter.Add(Incr : Integer);
  235. var
  236.   Temp : Integer;
  237. begin
  238.   Temp := Value + Incr;
  239.   if (Temp <= Maximum) and (Temp >= Minimum) then
  240.     SetValue(Temp);
  241. end;
  242.  
  243. end.
  244.